package {
	
import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.external.ExternalInterface;
import flash.system.Security;

import mailru.MailruCall;
import mailru.MailruCallEvent;

public class mailruCall extends MovieClip {
	
	private static const CUSTOM_JS_EVENT : String = 'customJSEvent';
	
	private var myID       : String;
	private var curAlbumId : String;
	
	private var btnGetMyID        : SimpleButton;
	private var btnGetUserInfo    : SimpleButton;
	private var btnPermissions    : SimpleButton;
	private var btnGetAlbums      : SimpleButton;
	private var btnGetPhotos      : SimpleButton;
	private var btnGetFiltFriends : SimpleButton;
	private var btnGetAudio       : SimpleButton;
	private var btnGetAppUsers    : SimpleButton;
	
	public function mailruCall() {
		stage.scaleMode = StageScaleMode.NO_SCALE;
		stage.align = StageAlign.TOP_LEFT;
		Security.allowDomain ( '*' );
		log ( 'App Started' );
		
		// Прежде всего необходимо инициализировать MailruCall
		MailruCall.init ( loaderInfo.parameters.flashName, loaderInfo.parameters.secretKey );
		
		// Теперь можно добавлять слушателей
		// COMPLETE диспатчится, когда JS API полностью загрузился и готов к работе
		MailruCall.addEventListener ( Event.COMPLETE, mailruReadyHandler );
		
		// Подписываемся на событие, которое может послать нам HTML-часть нашего приложения
		MailruCall.addEventListener ( CUSTOM_JS_EVENT, customEventHandler );
		
		// Вызываем методы Mail.ru API 
		btnGetMyID = (this as MovieClip).btn_getMyID;
		btnGetMyID.addEventListener ( MouseEvent.CLICK, btnMyIDHandler );
		
		btnGetUserInfo = (this as MovieClip).btn_getUserInfo;
		btnGetUserInfo.addEventListener ( MouseEvent.CLICK, btnGetUserInfoHandler );
		
		btnGetFiltFriends = (this as MovieClip).btn_getFriendsFiltere;
		btnGetFiltFriends.addEventListener ( MouseEvent.CLICK, btnGetFiltFriendsHandler );
		
		btnPermissions = (this as MovieClip).btn_requirePermissions;
		btnPermissions.addEventListener ( MouseEvent.CLICK, btnNotifPermissionsHandler );
		
		btnGetAlbums = (this as MovieClip).btn_getAlbums;
		btnGetAlbums.addEventListener ( MouseEvent.CLICK, btnGetAlbumsHandler );
		
		btnGetPhotos = (this as MovieClip).btn_getPhotos;
		btnGetPhotos.addEventListener ( MouseEvent.CLICK, btnGetPhotosHandler );
		
		btnGetAudio = (this as MovieClip).btn_getAudio;
		btnGetAudio.addEventListener ( MouseEvent.CLICK, btnGetAudioHandler );
		
		btnGetAppUsers = (this as MovieClip).btn_getAppUsers;
		btnGetAppUsers.addEventListener ( MouseEvent.CLICK, btnGetAppUsersHandler );
	}
	
	/** Кастомная функция для отладки **/
	private function log ( ...args ) : void {
		ExternalInterface.call ( 'flashLog', args.join ( ', ' ) );
	}
	
	/** Прогрузился API, можно делать вызовы **/
	private function mailruReadyHandler ( event : Event ) : void {
		log ( 'Mail.ru API ready' );
	}
	
	/** Пример получения собственных событий из HTML-части приложения **/
	private function customEventHandler ( event : MailruCallEvent ) : void {
		log ( 'onCustomEvent(): ' + traceObject ( event.data ) );
	}
	
	/** Получить свой ID **/
	private function btnMyIDHandler ( event : MouseEvent ) : void {
		myID = MailruCall.exec ( 'mailru.session.vid' );
		log ( 'myID: ' + myID );
	}
	
	/** Получить userInfo **/
	private function btnGetUserInfoHandler ( event : MouseEvent ) : void {
		MailruCall.exec ( 'mailru.common.users.getInfo', getUserInfoCallback );
	}
	
	private function getUserInfoCallback ( users : Array ) : void {
		log ( 'getUserInfoCallback(): ' + traceObject ( users ) );
	}
	
	/** Получить список друзей **/
	private function btnGetFiltFriendsHandler ( event : MouseEvent ) : void {
		if ( !myID ) { log ( 'Нажмите сначала «Get My ID»' ); return; }
		MailruCall.exec ( 'mailru.common.friends.getFiltered', getFriendsFilteredCallback, myID );
	}
	
	private function getFriendsFilteredCallback ( friends : Array ) : void {
		log ( 'getFriendsFilteredCallback(): ' + traceObject ( friends ) );
	}
	
	/** Проверить доступ к функционалу **/
	private function btnNotifPermissionsHandler ( event : MouseEvent ) : void {
		MailruCall.exec ( 'mailru.common.users.hasAppPermission', requireNotifPermissionsCallback, 'notifications' );
	}
	
	private function requireNotifPermissionsCallback ( permissions : Object ) : void {
		log ( 'requirePermissionsCallback(): ' + traceObject ( permissions ) );
	}
	
	/** Получить информацию о альбомах **/
	private function btnGetAlbumsHandler ( event : MouseEvent ) : void {
		if ( !myID ) { log ( 'Нажмите сначала «Get My ID»' ); return; }
		MailruCall.exec ( 'mailru.common.photos.getAlbums', getAlbumsCallback, myID );
	}
	
	private function getAlbumsCallback ( albums : Array ) : void {
		log ( 'getAlbumsCallback(): ' + traceObject ( albums ) );
		if ( albums[0] ) { curAlbumId = albums[0].aid; }
		trace ( 'curAlbumId: ' + curAlbumId );
	}
	
	/** Получить фотки альбома **/
	private function btnGetPhotosHandler ( event : MouseEvent ) : void {
		if ( !curAlbumId ) { log ( 'Нажмите сначала «Get Albums»' ); return; }
		MailruCall.exec ( 'mailru.common.photos.get', getPhotosCallback, curAlbumId, myID );
	}
	
	private function getPhotosCallback ( photos : Object ) : void {
		log ( 'getPhotosCallback(): ' + traceObject ( photos ) );
	}
	
	/** Получить аудиуо-записи **/
	private function btnGetAudioHandler ( event : MouseEvent ) : void {
		if ( !myID ) { log ( 'Нажмите сначала «Get My ID»' ); return; }
		MailruCall.exec ( 'mailru.common.audio.get', getAudioCallback, myID );
	}
	
	private function getAudioCallback ( records : Array ) : void {
		log ( 'getAudioCallback(): ' + traceObject ( records ) );
	}
	
	/** Получить аудиуо-записи **/
	private function btnGetAppUsersHandler ( event : MouseEvent ) : void {
		if ( !myID ) { log ( 'Нажмите сначала «Get My ID»' ); return; }
		MailruCall.exec ( 'mailru.common.friends.getAppUsers', getAppUsersCallback, 0, myID );
	}
	
	private function getAppUsersCallback ( users : Array ) : void {
		log ( 'getAppUsersCallback(): ' + traceObject ( users ) );
	}

}}
